package persistentie;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

import domein.PersonageCategorie;
import domein.SpelersPersonage;
import domein.exceptie.InvalidCategorieException;

/**
 * Klasse die verkeer met databank regelt mbt Personages
 * @author Bart Beyers
 * @since 22/02/2011
 */
public class PersonageMapper {
	private Statement statement;
	private Connection connection;
	
	/**
	 * Geeft alle personages in de databank terug
	 * @return Lijst met alle personages
	 */
	public List<SpelersPersonage> geefPersonages() {		
		List<SpelersPersonage> personages = new ArrayList<SpelersPersonage>();
		try {
			connection = PersistentieController.getInstance().getConnection();
			statement = connection.createStatement();
			
			ResultSet resultSet = statement.executeQuery("SELECT * FROM Personage ORDER BY naam");
			
			while(resultSet.next()) {
				String naam = resultSet.getString("naam");
				String categorie = resultSet.getString("categorie");
				int schadepunten = resultSet.getInt("schadepunten");
				double geld = resultSet.getInt("geld");
				PersonageCategorie pc = PersistentieController.getInstance().geefPersonageCategorie(categorie);
				personages.add(new SpelersPersonage(naam, pc,schadepunten, geld));
			}
			
			statement.close();
			
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null, e.getMessage(), "Fout", JOptionPane.ERROR_MESSAGE);
		}
		catch(InvalidCategorieException ice){
			JOptionPane.showMessageDialog(null, ice.getMessage(), "Fout", JOptionPane.ERROR_MESSAGE);
		}
		
		return personages;
	}

	/**
	 * Voegt een nieuw personage toe in de databank
	 * @param p Het nieuwe Personage
	 */
	public void maakPersonage(SpelersPersonage p){
		connection = PersistentieController.getInstance().getConnection();		
		try{
			statement = connection.createStatement();

			statement.executeUpdate("INSERT INTO Personage (naam,categorie,schadepunten, geld) VALUES ('" + p.getNaam() + "','" + p.getCategorie().getNaam() + "','" + p.getSchadepunten()+ "','" + p.getGeld() + "')");
			statement.close();
			//prepStatement = connection.prepareStatement("INSERT INTO Personage (naam, categorie) VALUES ( ?, ?)");
			//prepStatement.setString(1, p.getNaam());
			//prepStatement.setString(2, p.getCategorie().getNaam());
			
			//prepStatement.executeUpdate();
			
			//prepStatement.close();
		}
		catch(SQLException sqlException){
			JOptionPane.showMessageDialog(null, sqlException.getMessage(), "Fout", JOptionPane.ERROR_MESSAGE);
			PersistentieController.getInstance().closeConnection();
		}
	}

	/**
	 * Verwijderd een personage uit de databank.
	 * @author Sam Verschueren
	 * @param naam De naam van het personage
	 */
	public void verwijderPersonage(String naam) {
		connection = PersistentieController.getInstance().getConnection();		
		try{
			statement = connection.createStatement();

			statement.executeUpdate("DELETE * FROM Personage WHERE naam='" + naam + "'");
			statement.close();
		}
		catch(SQLException sqlException){
			JOptionPane.showMessageDialog(null, sqlException.getMessage(), "Fout", JOptionPane.ERROR_MESSAGE);
			PersistentieController.getInstance().closeConnection();
		}
	}
}
